package lambda;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import javax.swing.*;
import java.awt.event.ActionListener;
import java.util.Arrays;
import java.util.Comparator;

public class LambdaDemocracy {
    public static void main(String[] args) {
        //目标：Lambda表达式的省略具体规则
        //1.参数类型全部可以不写
        //2.如果只有一个参数，参数类型省略的同时“()”也可以省略，但多个参数不能省略“()”
        //3.如果方法体只有一行代码，大括号和return都可以省略，同时要省略分号“;”
        test1();
        test2();
    }


    public static void test1(){

        Outer[] o = new Outer[5];
        o[0] = new Outer("jack", 12, 1.85);
        o[1] = new Outer("tom", 20, 1.75);
        o[2] = new Outer("lucy", 33, 1.65);
        o[3] = new Outer("mary", 35, 1.55);
        o[4] = new Outer("kate", 16, 1.45);

        //需求：按钮年龄升序排序。可以调用sun公司写好的API直接对数组进行排序

//  1     Arrays.sort(o, new Comparator<Outer>() {//Outer 泛型参数，表示数组元素类型
//            @Override
//            public int compare(Outer o1, Outer o2) {
//                return o1.getAge() - o2.getAge();
//            }
//        });

//  2     Arrays.sort(o, (Outer o1, Outer o2) -> {
//            return o1.getAge() - o2.getAge();
//        });

//  3     Arrays.sort(o, (o1, o2) -> {//参数类型省略
//            return o1.getAge() - o2.getAge();
//        });

        Arrays.sort(o, (o1, o2) -> o1.getAge() - o2.getAge());

        //遍历数组并输出
        for (int i = 0; i < o.length; i++) {
            Outer temp = o[i];
            System.out.println(temp);
        }
    }

    public static void test2(){
        JFrame win = new JFrame("登录窗口");
        win.setSize(300,300);//设置窗口大小
        win.setLocationRelativeTo(null);//居中
        win.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//退出程序

        JPanel p = new JPanel();//创建面板
        win.add(p);//添加面板

        JButton b = new JButton("登录");
        p.add(b);//添加登录按钮

// 1      b.addActionListener(new ActionListener() {
//            @Override //重写底层方法
//            public void actionPerformed(ActionEvent e) {
//                System.out.println("点击了登录按钮");
//            }
//        });

//  2     b.addActionListener((ActionEvent e) -> {
//            System.out.println("点击了登录按钮");
//        });

//  3     b.addActionListener((e) -> {
//            System.out.println("点击了登录按钮");
//        });

//  4     b.addActionListener(e -> {
//            System.out.println("点击了登录按钮");
//        });

        b.addActionListener(e -> System.out.println("点击了登录按钮"));

        win.setVisible(true);//显示窗口
    }
}



@Data
@NoArgsConstructor
@AllArgsConstructor

class Outer {
    private String name;
    private int age;
    private double height;
}


